﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects.SqlClient;

namespace proyectoENS
{
    class DALAsistencias
    {

        private static proyectoENSEntities db = new proyectoENSEntities();
        public static void registrarAsistenciasClases(List<AsistenciaClases> lista)
        {
            foreach (AsistenciaClases item in lista)
            {
                var tmp = (from ac in db.AsistenciaClases
                           where SqlFunctions.DateDiff("day", ac.fecha, DateTime.Now) == 0 &&
                           SqlFunctions.DateDiff("month", ac.fecha, DateTime.Now) == 0 &&
                           SqlFunctions.DateDiff("year", ac.fecha, DateTime.Now) == 0 &&
                           ac.idAlumno == item.idAlumno
                           select ac).FirstOrDefault<AsistenciaClases>();
                if (tmp != null)
                {
                    tmp.asistencia = item.asistencia;
                    db.SaveChanges();
                }
                else
                {
                    db.AsistenciaClases.AddObject(item);
                    db.SaveChanges();
                }
            }
        }
  
        public static AsistenciaClases getAsistenciaByAlumno(int idAlumno)
        {
            var tmp = (from ac in db.AsistenciaClases
                       where ac.idAlumno == idAlumno &&
                       SqlFunctions.DateDiff("day", ac.fecha, DateTime.Now) == 0 &&
                       SqlFunctions.DateDiff("month", ac.fecha, DateTime.Now) == 0 &&
                       SqlFunctions.DateDiff("year", ac.fecha, DateTime.Now) == 0
                       select ac).FirstOrDefault<AsistenciaClases>();
            return tmp;

        }
        public static int getCantidadInasistencias(int idAlumno)
        {
            var tmp = (from ac in db.AsistenciaClases
                       where ac.idAlumno == idAlumno &&
                       ac.asistencia == "A" &&
                       SqlFunctions.DateDiff("year", ac.fecha, DateTime.Now) == 0
                       select ac).ToList<AsistenciaClases>();
            return tmp.Count;
        }
        public static int getCantidadTardanzas(int idAlumno)
        {
            var tmp = (from ac in db.AsistenciaClases
                       where ac.idAlumno == idAlumno &&
                       ac.asistencia == "T" &&
                       SqlFunctions.DateDiff("year", ac.fecha, DateTime.Now) == 0
                       select ac).ToList<AsistenciaClases>();
            return tmp.Count;
        }
        public static AsistenciaClases getAsistenciaByAlumnoFecha(int idAlumno, DateTime fecha)
        {
            var tmp = (from ac in db.AsistenciaClases
                       where ac.idAlumno == idAlumno &&
                       SqlFunctions.DateDiff("day", fecha, ac.fecha) == 0 &&
                       SqlFunctions.DateDiff("month", fecha, ac.fecha) == 0 &&
                       SqlFunctions.DateDiff("year", fecha, ac.fecha) == 0
                       select ac).FirstOrDefault<AsistenciaClases>();
            return tmp;

        }
        public static List<Alumnos> alumnosLibresPrimeraVezByCurso(int idCurso)
        {
            List<Alumnos> lista = new List<Alumnos>(); 
            int? cantFaltasMax = (from c in db.Configuraciones
                                 where c.configuracion == "cantidad faltas primera reincorporacion"
                                 select c.int1).FirstOrDefault();
            
            foreach (Alumnos item in DALAlumnos.getAlumnosByIdCurso(idCurso))
            {
                var faltas = (from ac in db.AsistenciaClases
                              where ac.idAlumno == item.id
                              select ac).ToList<AsistenciaClases>();
                if (faltas.Count > cantFaltasMax)
                    lista.Add(item);
            }
            return lista;
        }
 
    }
}
